#ifndef COMPONENT_H__
#define COMPONENT_H__

//include header
#include <string>

//using namespace
using namespace std;


namespace npComposite
{
    //class predeclaration

    class Component // class inheritance
    {
        //friend
        
        //embedded type
        
        public: Component();
        public: virtual ~Component();
        public: Component(const Component& cpy);
        public: Component& operator=(const Component& asn);
        public: virtual Component* clone() const;

        //other constructors
        public: Component(string name);

        //public methods
        public: void setName(string name);
        public: string getName() const;
        public: virtual void add(Component* component) = 0;
        public: virtual void remove(Component* component) = 0;
        public: virtual void display(int depth) = 0;

        //protected methods

        //private methods

        //protected data

        //private data
        private: string name;
    };
} // namespace npComposite


#endif //COMPONENT_H__
